package tech.aistar.day12.exception;

import tech.aistar.day02.FinalDemo;

/**
 * 本类用来演示: 笔试题
 *
 * @author: success
 * @date: 2021/3/23 3:28 下午
 */
public class FinallyDemo {

    private int val = 1;

    public static void main(String[] args) {
        //System.out.println(func(1));//3
        //System.out.println(func2(1));//3

        System.out.println(func2(new FinallyDemo()).val+"===");
    }

    //finally修改对象中的属性 - 会对结果产生改变
    public static FinallyDemo func2(FinallyDemo a) {
        try {
            a.val = 1; // 执行顺序 1
            //先把a对象进行了缓存,最终返回的...
            return a;  // 执行顺序 2
        }catch(Exception e) {

        }finally {
            a.val = 2; // 执行顺序 3
        }
        // 下面的代码不执行
        System.out.println("return");
        return a;
    }


    public static int func(int x) {
        try {
            x++;
        }catch(Exception e) {

        }finally {
            x++;
        }
        return x;
    }

    //finally修改基本数据类型
    public static int func2(int x) {
        try {
            x++;    // 执行顺序 1

            //缓存
            //return后面的x++照样会执行.但是并没有把这个结果返回出去,而是把这个结果缓存起来了.
            //return返回出去的仍然是刚刚缓存起来的那个结果2
            return x++; // 执行顺序 2
        } catch (Exception e) {

        } finally {
            System.out.println("x = " + x); // x = 3
            System.out.println("finally"); //执行顺序 3
            x += 2;//finally中的修改它是不会影响最终的返回结果的
        }
        // 下面的代码不执行，因为在try中就return了
        //System.out.println("return");
        return x;
    }


}
